package com.tom.joke.fragment;

import android.graphics.Color;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

import com.tom.baselibrary.base.BaseFragment;
import com.tom.baselibrary.ioc.ViewById;
import com.tom.joke.R;
import com.tom.joke.view.indicator.ColorTrackTextView;
import com.tom.joke.view.indicator.IndicatorAdapter;
import com.tom.joke.view.indicator.TrackIndicatorView;

import java.util.ArrayList;
import java.util.List;


/**
 * 顶部：DefaultNavigationBar
 * 主页面：使用中间部分 Fragment+ [RadioGroup+RadioButton]底部实现。
 *
 * 发现Fragment页面。
 * 使用ViewPager 承载左右滑动主体，每个分类页面使用ItemFragment 承载。
 *     addOnPageChangeListener监听VP的左右滑动，设置顶部标题的切换渐变色效果ColorTrackTextView。
 * ItemFragment 显示一个TextView，后期可以改成RecyclerView列表。
 * TrackIndicatorView ViewPager的顶部指示器。
 */
public class FindFragment extends BaseFragment {
    private static final String TAG = "FindFragment";
    private String[] items = {"直播", "推荐", "视频资", "图片", "段子", "精华","同城","游戏"};

    @ViewById(R.id.indicator_view)
    private TrackIndicatorView mIndicatorView;
    @ViewById(R.id.view_pager)
    private ViewPager mViewPager;

    // 缓存。ColorTrackTextView
    private List<ColorTrackTextView> mIndicators = new ArrayList<>();

    @Override
    protected void initView() {
        initIndicator();
        initViewPager();
    }

    @Override
    protected void initData() {

    }

    @Override
    protected int getLayoutId() {
        return R.layout.fragment_find;
    }


    private void initViewPager() {
        mViewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return ItemFragment.newInstance(items[position]);
            }

            @Override
            public int getCount() {
                return items.length;
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {

            }
        });

        /**
         * 添加一个切换的监听那个setOnPageChangeListener过时了
         * 这个看源码去吧
         */
        mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                Log.e(TAG, "position --> " + position + " positionOffset --> " + positionOffset);
                if (positionOffset > 0) {
                    // 获取左边
                    ColorTrackTextView left = mIndicators.get(position);
                    // 设置朝向
                    left.setDirection(ColorTrackTextView.Direction.RIGHT_TO_LEFT);
                    // 设置进度  positionOffset 是从 0 一直变化到 1 不信可以看打印
                    left.setCurrentProgress(1 - positionOffset);

                    // 获取右边
                    ColorTrackTextView right = mIndicators.get(position + 1);
                    right.setDirection(ColorTrackTextView.Direction.LEFT_TO_RIGHT);
                    right.setCurrentProgress(positionOffset);
                }
            }
        });
        // 默认一进入就选中第一个
//        ColorTrackTextView left = mIndicators.get(0);
//        left.setDirection(ColorTrackTextView.Direction.RIGHT_TO_LEFT);
//        left.setCurrentProgress(1);
    }

    private void initIndicator() {
        // 泛型，尖括号中要传入 ColorTrackTextView，下面所有T的内容，都要是ColorTrackTextView这个.
        mIndicatorView.setAdapter(new IndicatorAdapter<ColorTrackTextView>() {
            @Override
            public int getCount() {
                return items.length;
            }

            @Override
            public ColorTrackTextView getView(int position, ViewGroup parent) {
                // View.inflate 加载不同的布局。作为Tab内容。可以上面是图标+下面是图片的结构。
                ColorTrackTextView colorTrackTextView = new ColorTrackTextView(context);
                colorTrackTextView.setTextSize(20);
                colorTrackTextView.setChangeColor(Color.RED);
                colorTrackTextView.setText(items[position]);
                mIndicators.add(colorTrackTextView); // 加入集合，便于mViewPager 切换使用。
                return colorTrackTextView;
            }

            @Override
            public void highLightIndicator(ColorTrackTextView view) {
                // 当前选中的View，变成选中状态
                view.setDirection(ColorTrackTextView.Direction.RIGHT_TO_LEFT);
                view.setCurrentProgress(1);
            }

            @Override
            public void restoreIndicator(ColorTrackTextView view) {
                // 上一个选中的View，恢复默认
                view.setDirection(ColorTrackTextView.Direction.RIGHT_TO_LEFT);
                view.setCurrentProgress(0);
            }

            @Override
            public View getBottomTrackView() {
                // tab底部指示器，不覆盖方法将没有指示器。
                View view = new View(getActivity());
                view.setBackgroundColor(Color.RED);
                // ViewGroup.LayoutParams.MATCH_PARENT, 88
                view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 8));
                return view;
            }
        }, mViewPager, false);


        mIndicatorView.post(new Runnable() {
            @Override
            public void run() {
                // 设置默认选中第3个tab。
                mIndicatorView.setDefaultTab(3);
            }
        });
    }

}
